#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <unistd.h>
#include <string.h>
// 函数指针

// 这是求异或函数。通常用于得到一个crc校验。
unsigned char functionCalculateXor(unsigned char *buff, int len)
{
    unsigned char tmpxor = 0;
    if(!buff)
    {
        return tmpxor;
    }
    for(int i = 0; i < len; i++)
    {
        tmpxor ^= buff[i];
    }
    return tmpxor;
}

// typedef定义一个类型。
// 这里定义一个函数指针类型。这个类型名为funcType,可以通过类型名定义函数指针的变量。
// typedef(表示定义一个类型，前面有提到过) unsigned char(这是返回类型) (*funcType(固定写法，funcType表示类型名))(unsigned char *(参数1，可以不用写参数名), int(参数2，可以不用写参数名));
typedef unsigned char (*funcType)(unsigned char *, int);

int main(int argc, char **argv)
{
    unsigned char tmpbuffer[] = "abcdefgh0123456789";
    funcType tmpInstance = functionCalculateXor;
    unsigned char tmpxor = tmpInstance(tmpbuffer, sizeof(tmpbuffer));
    printf("[%s,%d]finish value=0x%02x\n", __FILE__, __LINE__, tmpxor);
    return 1;
}
